﻿@model dynamic

@{
    ViewBag.Title = "结果";
    var text = "<h2>text</h2>";
    var text2 = new HtmlString("<h2>text</h2>");
    string info = ViewBag.Url as string;

    //利用这种方法，如果输入了"></a><script type="text/javascript" src="http://localhost:8090/scripts/test.js"></script><a href="就会出现问题
    var link = "<a href=\"" + info + "\">" + info + "</a>";
    var param = ViewBag.Param as string;
}

<h2 class="site-title">结果</h2>
@* 默认情况下，通过Razor输出，都会进行HtmlEncode。如以下text将会输出<h2>text</h2>而不是加粗了的text
，这个虽然对安全性这些有好处，但是如果要通过服务端自定义输出，还是比较有难度的 *@
@text
@* 可以转换成HtmlString输出 *@
@text2
@* 也可以使用Raw的扩展方法 *@
@Html.Raw(text)
<br />

<h2 class="site-title">被黑客利用的情况</h2>
<p>--------------------------------------------------------------------------</p>
@Html.Raw(link)
<p>--------------------------------------------------------------------------</p>

<h2 class="site-title">Url.Action的攻击方法</h2>
<a href="@Url.Action("display", new RouteValueDictionary() { { "Url", param } })">@param</a>
@*<iframe src="http://www.baidu.com" height="500" width="500" />*@
@*<a href="">被黑了吧</a><iframe src="http://www.baidu.com" height="500" width="500" /><a href="">gqq</a>*@


<h2 class="site-title">Javascript注入</h2>
<h1 id="welcome-message"></h1>
@section scripts{
    @if (ViewBag.UserName != null)
    {
        <script type="text/javascript">
            $(function() {
                var msg = "velcome, @ViewBag.UserName";
                $("#welcome-message").html(msg).hide().show('slow');
            });
        </script>
    }
}
<p>
    <a href="@Url.Action("Index")">返回</a>
</p>
